/**
* @File:mx01.h
* @Version:V1.0
* @Author:rudius
* @Brief:
* @Logs:
* 	Date		Author		Notes
* 	2025-07-26	rudius		first version
*/

#ifndef __MX01_H
#define __MX01_H
// <<< Use Configuration Wizard in Context Menu >>>

/* Includes ------------------------------------------------------------------*/
#include <stdint.h>
#include <stddef.h>

#ifdef __cplusplus
extern "C" {
#endif

/*----------------------------------------------------------------------------*/

/* Public define -------------------------------------------------------------*/
/* Public macro --------------------------------------------------------------*/
/* Public typedef ------------------------------------------------------------*/
#include <rtconfig.h>

//#define MX01_MX01_USING_SAMPLE

#define MX01_MX01_BAUDRATE            115200  //串口波特率
#define MX01_MX01_BYTE_TMO_MS         5       //字节超时
#define MX01_MX01_ACK_TMO_MS          500     //应答超时
#define MX01_MX01_CMD_INTV_MS         50      //命令间隔
#define MX01_MX01_SEND_INTV_MS        50      //数据发送间隔
#define MX01_MX01_UAT_BUF_SIZE        256     //AT缓冲区尺寸
#define MX01_MX01_MTU                 244     //最大传输单元尺寸
#define MX01_MX01_TEST_TIMES          15      //通信测试次数
#define MX01_MX01_RETRY_TIMES         3       //重试次数
#define MX01_MX01_CONPARAM            0       //连接参数, 0 - 非低功耗，1 - 低功耗

#define MX01_MX01_THREAD_STK_SIZE     1024
#define MX01_MX01_THREAD_PRIO         7

typedef enum{
    MX01_CTRL_RESET = 0,  //复位
    MX01_CTRL_SLEEP,      //休眠
    MX01_CTRL_WAKEUP,     //唤醒
    MX01_CTRL_GET_STATUS, //获取当前状态
    MX01_CTRL_SET_NOTIFY, //设置接收通知回调函数
    MX01_CTRL_CLR_RECV    //清除接收缓存数据
}mx01_ctrl_t;

typedef enum{
    MX01_PWR_5dB = 0,     //5dB
    MX01_PWR_4dB,         //4dB
    MX01_PWR_3dB,         //3dB
    MX01_PWR_0dB,         //0dB
    MX01_PWR_N2dB,        //-2dB
    MX01_PWR_N5dB,        //-5dB
    MX01_PWR_N6dB,        //-6dB
    MX01_PWR_N10dB,       //-10dB
    MX01_PWR_N15dB,       //-15dB
    MX01_PWR_N20dB        //-20dB
}mx01_power_t;

typedef enum{
    MX01_STA_CLOSE = 0,   //关闭
    MX01_STA_CFG,         //正在进行配置
    MX01_STA_READY,       //启动完成，等待设备连接
    MX01_STA_CONNECT,     //已连接
    MX01_STA_SLEEP,       //休眠
}mx01_status_t;

typedef struct{
    const char *serial;     //串口设备名
    int sleep;              //休眠控制引脚
    int fifo_size;          //FIFO尺寸
    int aintvl;             //广播间隔，20~10000 ms
    mx01_power_t power;       //发射功率
}mx01_cfg_t;

struct mx01_device;
typedef struct mx01_device *mx01_dev_t;
/* Public variables ----------------------------------------------------------*/
/* Public function prototypes ------------------------------------------------*/
mx01_dev_t mx01_create(const char *name, const mx01_cfg_t *cfg);//创建蓝牙设备
void mx01_destory(mx01_dev_t dev);//销毁蓝牙设备
int mx01_open(mx01_dev_t dev);//打开
int mx01_close(mx01_dev_t dev);//关闭
int mx01_read(mx01_dev_t dev, int pos, void *buf, int bufsize);//读取接收数据
int mx01_write(mx01_dev_t dev, int pos, void *buf, int size);//写入发送数据
int mx01_control(mx01_dev_t dev, int cmd, void *args);//控制
#ifdef __cplusplus
}
#endif

// <<< end of configuration section >>>
#endif
/*------------------------------end of mx01.h---------------------------------*/
